package com.example.demo.AppUtil;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/*
 * @Author:大力王
 * @Date:2024/6/10-10-21:30
 * 开始了
 */
public class HttpContextUtils {
    /**
     * 获取当前请求的HttpServletRequest对象。
     * 该方法利用Spring框架的RequestContextHolder获取当前线程绑定的请求属性，
     * 适用于需要直接操作HttpServletRequest场景，如获取请求参数、头信息等。
     *
     * @return 当前请求的HttpServletRequest对象。
     */
    public static HttpServletRequest getHttpServletRequest() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    }

    /**
     * 获取当前请求的域名。
     * 通过HttpServletRequest的getRequestURL方法获取完整的请求URL，然后删除其中的请求URI部分，
     * 从而得到域名部分。适用于需要根据请求构建绝对路径或进行域名相关的逻辑处理。
     *
     * @return 当前请求的域名。
     */
    public static String getDomain(){
        HttpServletRequest request = getHttpServletRequest();
        StringBuffer url = request.getRequestURL();
        return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();
    }

    /**
     * 获取当前请求的Origin头部信息。
     * Origin头部字段用于CORS（跨源资源共享）请求中，表示发起请求的源站点。
     * 通过HttpServletRequest的getHeader方法直接获取该头部信息，适用于需要对跨源请求进行处理的场景。
     *
     * @return 当前请求的Origin头部信息。
     */
    public static String getOrigin(){
        HttpServletRequest request = getHttpServletRequest();
        return request.getHeader("Origin");
    }
}
